using System;
using System.Linq;
using M1;
using UnityEngine;

[CreateAssetMenu(fileName = "逻辑数据配置",menuName = "创建数据/逻辑数据配置")]
public class 逻辑数据 : BaseModel<逻辑数据,逻辑数据Data>
{
    public void 执行逻辑(int id,bool 动态=true)
    {
        var datas = Datas.Where(f => f.Mid == id);

        foreach (var data in datas)
        {
            switch (data.操作)
            {
                case 表格操作.主角位移:
                    var 主角 = GameObject.FindWithTag("Player");
                    主角.transform.localPosition = data.操作V3.V3();
                    float y = data.操作float;
                    主角.transform.localEulerAngles = new Vector3(0, y, 0);
                    break;
                case 表格操作.相机跟随:
                    var 相机跟随 = GameObject.FindObjectOfType<摄像机跟随>();
                    if (相机跟随 != null)
                    {
                        object type;
                        if (Enum.TryParse(typeof(相机跟随模式), data.操作string, out type))
                        {
                            相机跟随.跟随模式 = (相机跟随模式)type;
                        }
                    }
                    break;
                case 表格操作.打开窗口:
                    Window管理器.Instance.OpenWindow(data.操作string);
                    break;
                case 表格操作.主角名片:
                    bool 开关 = data.操作string.ToLower() == "true";
                    var 主角2 = GameObject.FindWithTag("Player");
                    if (主角2 != null)
                    {
                        var 人 = 主角2.GetComponent<人>();
                        人.Show名片(开关);
                    }
                    break;
                case 表格操作.打开对白:
                    Window管理器.Instance.OpenWindow<对话窗口View>();
                    var w = Window管理器.Instance.GetWindow<对话窗口View>();
                    w.SetUpDialog((int)data.操作float);
                    break;
                case 表格操作.新手引导:
                    switch (data.操作string)
                    {
                        case "挖洞":
                            Window管理器.Instance.OpenWindow<新手引导View>();
                            var 新手 = Window管理器.Instance.GetWindow<新手引导View>();
                            新手.开始挖洞((填洞Type)data.操作float);
                            break;
                        case "停止挖洞":
                            var 新手2 = Window管理器.Instance.GetWindow<新手引导View>();
                            新手2.停止挖洞();
                            break;
                        case "引导寻路":
                            var main = Window管理器.Instance.GetWindow<主界面View>();
                            main.引导点击寻路();
                            break;
                    }
                    break;
                case 表格操作.生成Npc:
                    int NpcId = (int)data.操作float;
                    Npc配置.Instance.执行逻辑(NpcId,动态);
                    var npc = Npc配置.Instance.getNpc(NpcId);
                    if (动态)
                    {
                        npc.开启任务标识();
                    }
                    break;
                case 表格操作.镜头移动:
                    var 人2 = M二合小镇.Get主角();
                    if (data.操作string == "Npc")
                    {
                        var Npc = Npc配置.Instance.getNpc((int)data.操作float);
                        if (Npc != null)
                        {
                            人2.ft.target = Npc;
                        }
                    }else if (data.操作string == "Self")
                    {
                        人2.ft.target = 人2;
                    }
                    break;
            }
        }
    }

}

[Serializable]
public class 逻辑数据Data
{
    public int Id;
    public int Mid;
    public 表格操作 操作;
    public string 操作string;
    public float 操作float;
    public JsonV3 操作V3;
}

public enum 表格操作
{
    主角位移,
    相机跟随,
    打开窗口,
    主角名片,
    打开对白,
    新手引导,
    生成Npc,
    镜头移动,
}

public enum 表格操作条件
{
    直接触发,
    接受任务时,
}